﻿Imports System.Linq.Expressions
Imports System.Reflection
Imports Kairyu.DCEngine

''' <summary>
''' クエリインターフェイス
''' </summary>
''' <remarks></remarks>
Public Interface IQuery

    ''' <summary>
    ''' プロバイダ
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Property Provider() As QueryProvider

    ''' <summary>
    ''' 条件
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    ReadOnly Property Conditions As IList(Of ICondition)

    ''' <summary>
    ''' 結合条件から外すプロパティを示します
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    ReadOnly Property IgnoreJoins As IList(Of PropertyInfo)

    ''' <summary>
    ''' 上層カスケードレベル
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks>カスケードレベルが0の場合、カスケードをしません</remarks>
    Property CascadeLevel As Integer

    ''' <summary>
    ''' 外部結合かどうかを示します
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Property CanLeftJoin As Boolean

    ''' <summary>
    ''' ルートタイプ
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    ReadOnly Property RootType() As Type
End Interface

''' <summary>
''' クエリインターフェイス
''' </summary>
''' <remarks></remarks>
Public Interface IQuery(Of T)
    Inherits IQuery

    ''' <summary>
    ''' リストに変換します
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Function ToList() As IList(Of T)

    ''' <summary>
    ''' アイテムに変換します
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Function ToItem() As T

End Interface

